package org.ch02.test03;

import org.ch02.entity.Student;

import java.lang.reflect.Field;

/**
 * 反射常用API - Field - 类的属性（字段）
 *
 * @author ZQX
 * @date 2025-03-18
 */
public class MainTest04 {
    public static void main(String[] args) throws Exception {
        // 第一：获取操作类的 Class 对象
        Class<Student> clazz = Student.class;

        // 第二：基于 Class 对象，实现相关的操作 - 运行时、动态性 - 框架、工具
        // Class对象可以获取类的所有信息（对象）
        // 1.实例化 Student 对象
        // Constructor<Student> constructor = clazz.getConstructor();
        // Student stu = constructor.newInstance();
        Student stu = clazz.getConstructor().newInstance();


        // 2.获取要操作的具体某个字段（属性）
        Field ageField = clazz.getDeclaredField("age");

        // 3.开放私有字段的访问权限
        ageField.setAccessible(true);

        // 4.初始化字段（属性） -  stu.setAge(20)
        ageField.set(stu, 20);

        // 5.获取字段（属性）值 - stu.getAge()
        Object age = ageField.get(stu);

        System.out.println("年龄：" + age);

    }
}
